package com.day14;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 异常处理的方式二:throws + 异常类型
 *
 * 1.throws + 异常类型写在方法的声明处，指明此方法执行时，可能会抛出的异常类型。
 *      一旦当方法执行时，出现异常，仍然会在异常代码处生成一个异常类的对象，此对象满足throws后异常类型时，
 *      就会抛出异常。
 * 2.体会:try-catch-finally:真正的将异常给处理调了
 *      throws的方式只是将异常抛给了方法的调用者。并没有真正将异常处理掉.
 *
 *
 *3.开发中如何选择使用try-catch-finally还是使用throws?
 *  3.1 如果父类中被重写的方法没有throws方式处理异常，则子类重写的方法也不能使用throws，意味着子类重写的方法中有异常的话，
 *      必须使用try-catch-finally来处理异常。
 *
 *  3.2 执行的方法中，先后又调用了另外几个方法，这几个方法是递进关系的，我们建议这几个方法使用throws的方式进行处理。
 *      而负责执行的方法a，则可以使用try-catch-finally的方式进行处理。
 *  3.3 避免两种方式同时使用。
 *
 *
 *
 */
public class ExceptionTest2 {

    public static void main(String[] args) {
        //到main方法了，就不要再往外抛出异常了，进行try-catch异常处理。
        try {
            new ExceptionTest2().method2();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void method2() throws IOException {
        method1();
    }


    public void method1() throws FileNotFoundException, IOException {
        File file = new File("hello.txt");

        FileInputStream fileInputStream = new FileInputStream(file);

        int data = fileInputStream.read();
        while (data != -1) {
            System.out.println((char) data);
            data = fileInputStream.read();
        }
        fileInputStream.close();
    }

}
